package d1_midterm_examination.d2_SecondQuestion;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SecondQuestion {
    public static void main(String[] args) {
        //目标: 完成期中考试的第二题
        //1、准备数据
        String userStrs =
                "10001:张三:男:1990-01-01#" +
                        "10002:李四:女:1989-01-09#" +
                        "10003:王五:男:1999-09-09#" +
                        "10004:刘备:男:1899-01-01#" +
                        "10005:孙悟空:男:1900-01-01#" +
                        "10006:张三:女:1999-01-01#" +
                        "10007:刘备:女:1999-01-01#" +
                        "10008:张三:女:2003-07-01#" +
                        "10009:猪八戒:男:1900-01-01";

        //2、创建一个集合,用于存储用户
        List<User> users = new ArrayList<>();
        //9、创建一个日期格式化对象
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        //3、切割字符串
        String[] split = userStrs.split("#");
        for (String userStr : split) {
            //4、再对每个子串就进行切割
            String[] everyUser = userStr.split(":");
            //5、遍历每个用户数据的数组,然后将数据封装到集合中去,然后再进行压到集合里面去
            //6、创建一个对象,用封装数据
            User user = new User();
            for (int i = 0; i < everyUser.length; i++) {
                if ((i + 1) % 4 == 0) {//第四位
                    //7、将字符串的数据转换成LocalDate对象,然后再封装
                    user.setBirthday(LocalDate.parse(everyUser[i], dtf));
                } else if ((i + 1) % 4 == 1) {//第一位
                    user.setId(Long.parseLong(everyUser[i]));
//                    System.out.println(1);
                } else if ((i + 1) % 4 == 2) {//第二位
                    user.setName(everyUser[i]);
                } else if ((i + 1) % 4 == 3) {//第三位
                    user.setGender(everyUser[i]);
                }
            }

            //8、将封装好数据的每一个对象存到集合中去
            users.add(user);

            //9、进行输出
//            users.forEach(v -> System.out.println(v));
            //实例方法引用

            //需求2
            //2.1获取每个名字出现的次数
           /* countNameTime("张三");
            countNameTime("李四");
            countNameTime("王五");
            countNameTime("刘备");*/

        }
        users.forEach(System.out::println);

        System.out.println("----------------------------------------");
        //10、创建一个Map集合
        Map<String, Integer> map = new HashMap<>();
        //11、遍历list集合
        for (User user1 : users) {
            String name = user1.getName();
            if (map.containsKey(name)){
                map.put(name, map.get(name) + 1);
            }else {
                map.put(name, 1);
            }
        }

        //12、便利Map集合
        map.forEach((k, v) -> System.out.println(k + ":" + v + "次"));
    }

}

